package com.ww.springboot.sharding.service;


import com.baomidou.mybatisplus.extension.service.IService;
import com.ww.springboot.sharding.entity.OutOrderDetailsEntity;
import com.ww.springboot.sharding.vo.FindOrderVO;
import com.ww.springboot.sharding.vo.OutOrderDetailsVO;
import com.ww.springboot.sharding.vo.PageVO;

import java.util.Collection;
import java.util.Date;
import java.util.List;

/**
 * 订单详情
 * 2020年7月1日10:53:09
 * 伍金亮
 */
public interface IOutOrderDetailsService extends IService<OutOrderDetailsEntity> {
    /**
     * 分页查询订单详情(订单-物流商-发货方式-轨迹表)
     */
    List<OutOrderDetailsVO> selectOutOrderDetailsPage(FindOrderVO findOrderVO, PageVO page);

    /**
     * 分页查询订单总数
     */
    int outOrderDetailsSize(FindOrderVO findOrderVO);

    /**
     * 退件订单
     *
     * @param oId
     */
    void outOrderDetailsUpdate(String oId);

    /**
     * 添加OutOrderDetails表
     *
     * @param list
     */
    void insertOutOrderDetails(List<OutOrderDetailsEntity> list);

    /**
     * 修改OutOrderDetails表
     *
     * @param list
     */
    void updateOutOrderDetails(List<OutOrderDetailsEntity> list);

    /**
     * 修改OutOrderDetails表
     *
     * @param obj
     */
    void updateOutOrderDetailsObj(OutOrderDetailsEntity obj);

    /**
     * 更新订单表轨迹状态
     *
     * @param outOrderDetailsEntity
     */
    void updateTraceStatus(OutOrderDetailsEntity outOrderDetailsEntity);


    /**
     * 定时任务 每次批量查询订单表 获取未签收订单数据 抓取轨迹
     *
     * @param startTime   开始时间
     * @param endTime     结束时间
     * @param pageStart   分页参数- 开始条数
     * @param pageSize    分页参数- 每页条数
     * @param traceStatus 签收状态
     * @return
     */
    List<OutOrderDetailsEntity> findOrders(Date startTime, Date endTime, Integer pageStart, Integer pageSize, List<Integer> traceStatus);


    /**
     * 定时任务 每次批量查询订单表 获取未签收订单数据 抓取轨迹
     *
     * @param diId        物流商id
     * @param dgId        发货方式组id
     * @param startTime   开始时间
     * @param endTime     结束时间
     * @param pageStart   分页参数- 开始条数
     * @param pageSize    分页参数- 每页条数
     * @param traceStatus 签收状态
     * @return
     */
    List<OutOrderDetailsEntity> findOrdersById(Long diId, Long dgId, Date startTime, Date endTime, Integer pageStart, Integer pageSize, List<Integer> traceStatus);


    /**
     * 根据跟踪码运单号获取订单信息
     *
     * @param trackingNumber 运单号
     * @param dates          出库时间列表
     * @return
     */
    OutOrderDetailsEntity findOrderByTrackingNumber(String trackingNumber, Collection<Date> dates);


    /**
     * 根据扩展跟踪码运单号获取订单信息
     *
     * @param trackingNumber 跟踪码 trackingNumberEx 扩展跟踪码
     * @param dates          出库时间列表
     * @return
     */
    OutOrderDetailsEntity findOrderByTrackingNumberOrEx(String trackingNumber, Collection<Date> dates);


    /**
     * 根据订单号查询订单信息
     *
     * @param oId   订单id
     * @param dates 出库时间列表
     * @return
     */
    OutOrderDetailsEntity findOrderByoId(Long oId, Collection<Date> dates);


    /**
     * 根据订单号查询订单信息
     *
     * @param oId   订单集合 可以是集合的任意子类
     * @param dates 出库时间列表
     * @return 订单列表
     */
    List<OutOrderDetailsEntity> findOrderByoId(Collection<Object> oId, Collection<Date> dates);


    /**
     * 根据运单号列表查询订单信息
     *
     * @param trackingNumber 跟踪码列表
     * @param dates          出库时间列表
     * @return 订单列表
     */
    List<OutOrderDetailsEntity> findOrderByTrackingList(Collection<String> trackingNumber, Collection<Date> dates);


    /**
     * 根据运单号列表查询订单信息
     *
     * @param trackingNumberEx 扩展跟踪码列表
     * @param dates            出库时间列表
     * @return 订单列表
     */
    List<OutOrderDetailsEntity> findOrderByTrackingExList(Collection<String> trackingNumberEx, Collection<Date> dates);


    /**
     * 根据主键id 列表获取订单信息
     *
     * @param ids   主键id列表
     * @param dates 出库时间列表
     * @return 订单列表
     */
    List<OutOrderDetailsEntity> findByIds(Collection<String> ids, Collection<Date> dates);

}
